package com.skiving.cloud.develop.controller;

import com.mybatisflex.core.paginate.Page;
import com.skiving.cloud.auth.logutils.OperateLog;
import com.skiving.cloud.common.exception.BusinessException;
import com.skiving.cloud.common.utils.PageParameter;
import com.skiving.cloud.common.utils.ReturnT;
import com.skiving.cloud.common.utils.UuidUtil;
import com.skiving.cloud.develop.entity.BusinessCommonParam;
import lombok.extern.slf4j.Slf4j;
import org.noear.solon.annotation.*;
import org.noear.solon.validation.annotation.Validated;
import org.noear.solon.core.util.MimeType;
import com.skiving.cloud.develop.entity.SysBusinessCommon;
import com.skiving.cloud.develop.service.SysBusinessCommonService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import java.util.List;

/**
 * 通用业务数据表(业务的表单数据） 控制层。
 *
 * @author skivingcloud
 * @since 2025-03-25
 */
@Slf4j
@Controller
@Api("通用业务数据表(业务的表单数据）接口")
@Mapping("/sysBusinessCommon")
@Produces(MimeType.APPLICATION_JSON_UTF8_VALUE)
public class SysBusinessCommonController {

    @Inject
    private SysBusinessCommonService sysBusinessCommonService;

    /**
     * 添加通用业务数据表(业务的表单数据）。
     *
     * @param sysBusinessCommon 通用业务数据表(业务的表单数据）
     * @return {@code true} 添加成功，{@code false} 添加失败
     */
    @Post
    @Mapping("/save")
    @ApiOperation("保存通用业务数据表(业务的表单数据）")
    @OperateLog(module="系统管理-通用业务数据", description = "新增通用业务数据")
    public ReturnT<Boolean> save(@Body @ApiParam("通用业务数据表(业务的表单数据）") SysBusinessCommon sysBusinessCommon) {
        sysBusinessCommon.setId(UuidUtil.get32UUID());
        return ReturnT.ok(sysBusinessCommonService.save(sysBusinessCommon));
    }

    /**
     * 根据主键删除通用业务数据表(业务的表单数据）。
     *
     * @param id 主键
     * @return {@code true} 删除成功，{@code false} 删除失败
     */
    @Get
    @Mapping("/remove/{id}")
    @ApiOperation("根据主键通用业务数据表(业务的表单数据）")
    @OperateLog(module="系统管理-通用业务数据", description = "删除通用业务数据")
    public ReturnT<Boolean> remove(@Path @ApiParam("通用业务数据表(业务的表单数据）主键") String id) {
        return ReturnT.ok(sysBusinessCommonService.removeById(id));
    }

    /**
     * 根据主键更新通用业务数据表(业务的表单数据）。
     *
     * @param sysBusinessCommon 通用业务数据表(业务的表单数据）
     * @return {@code true} 更新成功，{@code false} 更新失败
     */
    @Post
    @Mapping("/update")
    @ApiOperation("根据主键更新通用业务数据表(业务的表单数据）")
    @OperateLog(module="系统管理-通用业务数据", description = "修改通用业务数据")
    public ReturnT<Boolean> update(@Body @ApiParam("通用业务数据表(业务的表单数据）主键") SysBusinessCommon sysBusinessCommon) {
        return ReturnT.ok(sysBusinessCommonService.updateById(sysBusinessCommon, true));
    }

    /**
     * 查询所有通用业务数据表(业务的表单数据）。
     *
     * @return 所有数据
     */
    @Get
    @Mapping("/list")
    @ApiOperation("查询所有通用业务数据表(业务的表单数据）")
    public ReturnT<List<SysBusinessCommon>> list() {
        return ReturnT.ok(sysBusinessCommonService.list());
    }

    /**
     * 根据通用业务数据表(业务的表单数据）主键获取详细信息。
     *
     * @param id 通用业务数据表(业务的表单数据）主键
     * @return 通用业务数据表(业务的表单数据）详情
     */
    @Get
    @Mapping("/getInfo/{id}")
    @ApiOperation("根据主键获取通用业务数据表(业务的表单数据）")
    public ReturnT<SysBusinessCommon> getInfo(@Path @ApiParam("通用业务数据表(业务的表单数据）主键") String id) {
        return ReturnT.ok(sysBusinessCommonService.getById(id));
    }

    /**
     * 分页查询通用业务数据表(业务的表单数据）。
     *
     * @param parameter 分页对象
     * @return 分页对象
     */
    @Post
    @Mapping("/page")
    @ApiOperation("分页查询通用业务数据表(业务的表单数据）")
    public ReturnT<Page<SysBusinessCommon>> page(@Body @ApiParam("分页信息") PageParameter<SysBusinessCommon> parameter) {
        return ReturnT.ok(sysBusinessCommonService.queryByPage(parameter));
    }

    /**
     * 通用业务数据表提交
     * @param businessCommonParam 参数
     * @return 结果
     */
    @Post
    @Mapping("/submitBusinessCommonAdd")
    @ApiOperation("新增通用表单提交(业务的表单数据)")
    @OperateLog(module="系统管理-通用业务数据", description = "提交通用业务数据")
    public ReturnT<Boolean> submitBusinessCommonAdd(@Validated @Body @ApiParam("通用业务数据表(业务的表单数据)") BusinessCommonParam businessCommonParam) {
        try{
            return ReturnT.ok(sysBusinessCommonService.submitBusinessCommonAdd(businessCommonParam));
        }catch(BusinessException be){
            log.error(be.getMessage(), be);
            return ReturnT.error(be.getMessage());
        }catch(Exception e){
            log.error("保存通用业务数据表(业务的表单数据)失败", e);
            return ReturnT.error("保存通用业务数据表(业务的表单数据)失败！");
        }
    }

    /**
     * 通用业务数据表修改
     * @param businessCommonParam 参数
     * @return 结果
     */
    @Post
    @Mapping("/submitBusinessCommonUpdate")
    @ApiOperation("新增通用表单修改(业务的表单数据)")
    @OperateLog(module="系统管理-通用业务数据", description = "修改通用业务数据")
    public ReturnT<Boolean> submitBusinessCommonUpdate(@Validated @Body @ApiParam("通用业务数据表(业务的表单数据)") BusinessCommonParam businessCommonParam) {
        try{
            return ReturnT.ok(sysBusinessCommonService.submitBusinessCommonUpdate(businessCommonParam));
        }catch(BusinessException be){
            log.error(be.getMessage(), be);
            return ReturnT.error(be.getMessage());
        }catch(Exception e){
            log.error("保存通用业务数据表(业务的表单数据)失败", e);
            return ReturnT.error("保存通用业务数据表(业务的表单数据)失败！");
        }
    }
}
